home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 June / PCpro_2005_06.ISO / files / opensource / amc / amc_install.exe / {app} / Scripts / FilmAffinity (ES).ifs < prev    next >
Encoding:
Text File  |  2005-03-12  |  10.0 KB  |  336 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=aviloria  (aviloria@yahoo.com)
  8. Title=FilmAffinity (ES)
  9. Description=Movie importation script for FilmAffinity Spain
  10. Site=http://www.filmaffinity.com
  11. Language=ES
  12. Version=1.0
  13. Requires=3.5.0
  14. Comments=Updated by folgui to: |  - Separate import of Category and Description |  - Search only by title to improve speed|
  15. License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program FilmAffinity;
  23.  
  24. const
  25.   SearchBaseURL = 'http://www.filmaffinity.com/es/res.php?stext=';
  26.   SearchPostFix = '&stype=tit'; 
  27.   BaseURL1 = 'http://www.filmaffinity.com/es/';
  28.   BaseURL2 = 'http://www.filmaffinity.com';
  29.  
  30. var
  31.   MovieName: string;
  32.   MovieURL: string;
  33. //------------------------------------------------------------------------------------
  34.  
  35. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  36. var
  37.   i: Integer;
  38. begin
  39.   Result := -1;
  40.   if StartAt < 0 then
  41.     StartAt := 0;
  42.   for i := StartAt to List.Count-1 do
  43.     if Pos(Pattern, List.GetString(i)) <> 0 then
  44.     begin
  45.       Result := i;
  46.       Break;
  47.     end;
  48. end;
  49. //------------------------------------------------------------------------------------
  50.  
  51. function TextBetween(var S: string; StartTag: string; EndTag: string): string;
  52. var
  53.   InitialPos: Integer;
  54. begin
  55.   InitialPos := Pos(StartTag, S);
  56.   Delete(S, 1, InitialPos + Length(StartTag) - 1);
  57.   InitialPos := Pos(EndTag, S);
  58.   result := copy(S, 1, InitialPos - 1);
  59.   Delete(S, 1, InitialPos + 1);
  60. end;
  61. //------------------------------------------------------------------------------------
  62.  
  63. procedure AnalyzePage(Address: string);
  64. var
  65.   Page: TStringList;
  66.   LineNr: Integer;
  67.   Line: string;
  68.   MovieTitle, MovieAddress: string;
  69.  
  70. begin
  71.   Page := TStringList.Create;
  72.   Page.Text := GetPage(Address);
  73.   if Pos('<title>FilmAffinity', Page.Text) = 0 then
  74.   begin
  75.     ShowMessage('No se ha podido establecer la conexion.');
  76.   end else
  77.   begin
  78.     LineNr := FindLine('<td class="tt1" align="center">Resultados por Título</td>', Page, 0);
  79.     LineNr := LineNr + 7;
  80.     Line := Page.GetString(LineNr);
  81.     if Pos ('No se han encontrado coincidencias', Line) <> 0 then
  82.     begin
  83.       ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
  84.     end else
  85.     begin
  86.       PickTreeClear;
  87.       Line := TextBetween (Line, '<b>', '</b>');
  88.       PickTreeAdd('Encontrados ' + Line + ' resultados para "' + MovieName + '"', '');
  89.  
  90.       LineNr := LineNr + 9;
  91.       Line := Page.GetString(LineNr);
  92.       repeat
  93.         MovieAddress := TextBetween (Line, '<a href="', '">');
  94.         MovieTitle := TextBetween (Line, '<span class="ntext">', '</span>');
  95.         HTMLDecode(Movietitle);
  96.         PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
  97.         LineNr := LineNr + 3;
  98.         Line := Page.GetString(LineNr);
  99.       until Pos('</ol>', Line) > 0;
  100.  
  101.       if PickTreeExec(Address) then
  102.         AnalyzeMoviePage(Address);
  103.     end;
  104.   end;
  105.   Page.Free;
  106. end;
  107. //------------------------------------------------------------------------------------
  108.  
  109. procedure AnalyzeMoviePage(Address: string);
  110. var
  111.   Page: TStringList;
  112.   LineNr, aux: Integer;
  113.   Line: string;
  114.   Item: string;
  115.   Comments: string;
  116.   Actors: string;
  117.   Description: string;
  118.  
  119. begin
  120.   Comments := '';
  121.   Actors := '';
  122.   Description := '';
  123.  
  124.   // URL
  125.   SetField(fieldURL, Address);
  126.  
  127.   Page := TStringList.Create;
  128.   Page.Text := GetPage(Address);
  129.  
  130.   // Translated Title
  131.   LineNr := FindLine('<td align="center" class="tt1">', Page, 0);
  132.   Line := Page.GetString(LineNr);
  133.   Item := TextBetween (Line, '<td align="center" class="tt1">', ' <img src=');
  134.   HTMLDecode(Item);
  135.   SetField(fieldTranslatedTitle, Trim (Item));
  136.  
  137.   LineNr := LineNr + 8;
  138.   Line := Page.GetString(LineNr);
  139.  
  140.   // Original Title
  141.   if Pos ('TITULO ORIGINAL', Line) > 0 then
  142.   begin
  143.     LineNr := LineNr + 1;
  144.     Line := Page.GetString(LineNr);
  145.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  146.     HTMLDecode(Item);
  147.     SetField(fieldOriginalTitle, Trim (Item));
  148.     LineNr := LineNr + 1;
  149.     Line := Page.GetString(LineNr);
  150.   end;
  151.  
  152.   // Picture
  153.   if Pos ('owned by Studio', Line) > 0 then
  154.   begin
  155.     Item := TextBetween (Line, '<img src="', '" >');
  156.     GetPicture (BaseURL2 + Item);
  157.     LineNr := LineNr + 3;
  158.     Line := Page.GetString(LineNr);
  159.   end;
  160.  
  161.   // Year
  162.   if Pos ('AÑO', Line) > 0 then
  163.   begin
  164.     LineNr := LineNr + 1;
  165.     Line := Page.GetString(LineNr);
  166.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  167.     HTMLDecode(Item);
  168.     SetField(fieldYear, Trim (Item));
  169.     LineNr := LineNr + 3;
  170.     Line := Page.GetString(LineNr);
  171.   end;
  172.  
  173.   // Length
  174.   if Pos ('DURACIÓN', Line) > 0 then
  175.   begin
  176.     LineNr := LineNr + 1;
  177.     Line := Page.GetString(LineNr);
  178.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  179.     HTMLDecode(Item);
  180.     aux := Pos (' min', Item);
  181.     if aux > 0 then
  182.       Delete (Item, aux, aux + 3);
  183.     SetField(fieldLength, Trim (Item));
  184.     LineNr := LineNr + 3;
  185.     Line := Page.GetString(LineNr);
  186.   end;
  187.  
  188.   // Country
  189.   if Pos ('PAÍS', Line) > 0 then
  190.   begin
  191.     LineNr := LineNr + 1;
  192.     Line := Page.GetString(LineNr);
  193.     Item := TextBetween (Line, 'alt="', '">');
  194.     HTMLDecode(Item);
  195.     SetField(fieldCountry, Trim (Item));
  196.     LineNr := LineNr + 3;
  197.     Line := Page.GetString(LineNr);
  198.   end;
  199.  
  200.   // Director
  201.   if Pos ('DIRECTOR', Line) > 0 then
  202.   begin
  203.     LineNr := LineNr + 1;
  204.     Line := Page.GetString(LineNr);
  205.     Item := TextBetween (Line, '&stype=dir">', '</a>');
  206.     HTMLDecode(Item);
  207.     SetField(fieldDirector, Trim (Item));
  208.     LineNr := LineNr + 3;
  209.     Line := Page.GetString(LineNr);
  210.   end;
  211.  
  212.   // Script writer
  213.   if Pos ('GUIÓN', Line) > 0 then
  214.   begin
  215.     LineNr := LineNr + 1;
  216.     Line := Page.GetString(LineNr);
  217.     Item := TextBetween (Line, '<td class="ntext">', '</td>');
  218.     Comments := Comments + 'Guión: ' + Item + #13#10;
  219.     LineNr := LineNr + 3;
  220.     Line := Page.GetString(LineNr);
  221.   end;
  222.  
  223.   // Musician
  224.   if Pos ('MUSICA', Line) > 0 then
  225.   begin
  226.     LineNr := LineNr + 1;
  227.     Line := Page.GetString(LineNr);
  228.     Item := TextBetween (Line, '<td class="ntext" >', '</td>');
  229.     Comments := Comments + 'Música: ' + Item + #13#10;
  230.     LineNr := LineNr + 3;
  231.     Line := Page.GetString(LineNr);
  232.   end;
  233.  
  234.   // Photography
  235.   if Pos ('FOTOGRAFÍA', Line) > 0 then
  236.   begin
  237.     LineNr := LineNr + 1;
  238.     Line := Page.GetString(LineNr);
  239.     Item := TextBetween (Line, '<td class="ntext" >', '</td>');
  240.     Comments := Comments + 'Fotografía: ' + Item + #13#10;
  241.     LineNr := LineNr + 3;
  242.     Line := Page.GetString(LineNr);
  243.   end;
  244.  
  245.   // Actors
  246.   if Pos ('REPARTO', Line) > 0 then
  247.   begin
  248.     LineNr := LineNr + 1;
  249.     Line := Page.GetString(LineNr);
  250.     Actors := Actors + TextBetween (Line, '&stype=rep">', '</a>') + #13#10;
  251.     while Pos ('&stype=rep"> ', Line) > 0 do
  252.       Actors := Actors + TextBetween (Line, '&stype=rep"> ', '</a>') + #13#10;
  253.     LineNr := LineNr + 3;
  254.     Line := Page.GetString(LineNr);
  255.   end;
  256.  
  257.   // Productor
  258.   if Pos ('PRODUCTORA', Line) > 0 then
  259.   begin
  260.     LineNr := LineNr + 1;
  261.     Line := Page.GetString(LineNr);
  262.     Item := TextBetween (Line, '<td class="ntext" colspan="2">', '</td>');
  263.     HTMLDecode(Item);
  264.     SetField(fieldProducer, Trim (Item));
  265.     LineNr := LineNr + 3;
  266.     Line := Page.GetString(LineNr);
  267.   end;
  268.    
  269.   // Genere & Critic
  270.   if Pos ('GÉNERO Y CRÍTICA', Line) > 0 then
  271.   begin
  272.     Line := Copy (Page.Text, 1, Length (Page.Text));
  273.     Line := StringReplace(Line, '<br />', #13#10);
  274.     Line := TextBetween (Line, 'GÉNERO Y CRÍTICA', '</tr>');
  275.     Item := TextBetween (Line, '<td class="ntext" colspan="2">', '/ SINOPSIS:');
  276.     HTMLDecode(Item);
  277.     SetField(fieldCategory, Trim(Item));
  278.     Description := TextBetween (Line, '/ SINOPSIS:', '</td>');
  279.     LineNr := FindLine('WEB OFICIAL', Page, LineNr);
  280.     Line := Page.GetString(LineNr);
  281.   end;
  282.  
  283.   // Official Webpage
  284.   if Pos ('WEB OFICIAL', Line) > 0 then
  285.   begin
  286.     LineNr := LineNr + 1;
  287.     Line := Page.GetString(LineNr);
  288.     Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
  289.     LineNr := LineNr + 3;
  290.     Line := Page.GetString(LineNr);
  291.   end;
  292.  
  293.   // Rating
  294.   if Pos ('PUNTUACIÓN MEDIA', Line) > 0 then
  295.   begin
  296.     LineNr := LineNr + 1;
  297.     Line := Page.GetString(LineNr);
  298.     Item := TextBetween (Line, '<b>', '</b>');
  299.     HTMLDecode(Item);
  300.     if Length(Item) = 3 then
  301. //    begin
  302. //      Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0) + (StrToInt(StrGet(Item, 3), 0) / 10)));
  303. //    end else
  304. //    begin
  305. //      Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0)));
  306. //    end;
  307.     SetField(fieldRating, Item);
  308.     LineNr := LineNr + 3;
  309.     Line := Page.GetString(LineNr);
  310.   end;
  311.  
  312.   HTMLDecode(Comments);
  313.   SetField(fieldComments, Comments);
  314.   HTMLDecode(Actors);
  315.   SetField(fieldActors, Actors);
  316.   HTMLDecode(Description);
  317.   SetField(fieldDescription, Description);
  318. end;
  319. //------------------------------------------------------------------------------------
  320. //------------------------------------------------------------------------------------
  321.  
  322. begin
  323.   if CheckVersion(3,5,0) then
  324.   begin
  325.     MovieName := GetField(fieldOriginalTitle);
  326.     if MovieName = '' then
  327.       MovieName := GetField(fieldTranslatedTitle);
  328.     if Input('Importar de FilmAffinity', 'Introduzca el titulo de la pelicula:', MovieName) then
  329.     begin
  330.       AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix);
  331.     end;
  332.   end
  333.   else
  334.     ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
  335. end. 
  336.